bgo545980 - parse URIs in GtkFileChooserEntry
authorFederico Mena Quintero <federico@novell.com>
Wed, 21 Jan 2009 03:16:13 +0000 (03:16 +0000)
committerFederico Mena Quintero <federico@src.gnome.org>
Wed, 21 Jan 2009 03:16:13 +0000 (03:16 +0000)
2009-01-15  Federico Mena Quintero  <federico@novell.com>

http://bugzilla.gnome.org/show_bug.cgi?id=545980 -
GtkFileChooserEntry should handle URIs

* gtk/gtkfilesystem.c (_gtk_file_system_parse): Detect URI schemes
and parse the full URI.
(has_uri_scheme): New function, stolen from the old
gtkfilesystemgnomevfs.c.

Signed-off-by: Federico Mena Quintero <federico@novell.com>
svn path=/trunk/; revision=22154

ChangeLog
gtk/gtkfilesystem.c

index 030f2829cfc61cae96cea70b3260c5aa3ee76855..6c8d91c6af0e5af9a39250106f82de8f84b09051 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2009-01-15  Federico Mena Quintero  <federico@novell.com>
+
+       http://bugzilla.gnome.org/show_bug.cgi?id=545980 -
+       GtkFileChooserEntry should handle URIs
+
+       * gtk/gtkfilesystem.c (_gtk_file_system_parse): Detect URI schemes
+       and parse the full URI.
+       (has_uri_scheme): New function, stolen from the old
+       gtkfilesystemgnomevfs.c.
+
 2009-01-20  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtk.symbols:
index 549671da5af96a1879d01fd1e30d23762dee49cc..46c36cb05390995322fa5aad2b21cb5f448f7404 100644 (file)
@@ -637,6 +637,29 @@ _gtk_file_system_list_bookmarks (GtkFileSystem *file_system)
   return g_slist_reverse (files);
 }
 
+static gboolean
+is_valid_scheme_character (char c)
+{
+  return g_ascii_isalnum (c) || c == '+' || c == '-' || c == '.';
+}
+
+static gboolean
+has_uri_scheme (const char *str)
+{
+  const char *p;
+
+  p = str;
+
+  if (!is_valid_scheme_character (*p))
+    return FALSE;
+
+  do
+    p++;
+  while (is_valid_scheme_character (*p));
+
+  return (strncmp (p, "://", 3) == 0);
+}
+
 gboolean
 _gtk_file_system_parse (GtkFileSystem     *file_system,
                        GFile             *base_file,
@@ -657,7 +680,7 @@ _gtk_file_system_parse (GtkFileSystem     *file_system,
 
   last_slash = strrchr (str, G_DIR_SEPARATOR);
 
-  if (str[0] == '~')
+  if (str[0] == '~' || g_path_is_absolute (str) || has_uri_scheme (str))
     file = g_file_parse_name (str);
   else
     file = g_file_resolve_relative_path (base_file, str);